package modele;

import java.awt.Point;
import java.awt.Rectangle;

public class Doodler extends Sprite {

	private static final long serialVersionUID = 1L;

	/**
	 * La direction du doodler sur l'axe X
	 * -1 : gauche
	 * 1 : droite
	 */
	private int xdir;
	/**
	 * La direction du doodler sur l'axe Y
	 * -1 : haut
	 * 1 : bas
	 */
	private int ydir;
	private Point[] points;
	private int hauteurActuelle;
	private int hauteurMaximaleAtteinte;

	public Doodler(int x, int y) {
		super(x, y, Commune.DIAMETRE_DOODLER, Commune.DIAMETRE_DOODLER);
		xdir=0;
		ydir=-1;
		hauteurMaximaleAtteinte=hauteurActuelle=0;
		points=new Point[8];
		for (int i=0;i<points.length;i++) {
			points[i]=new Point((int)(getCenterX()+((getWidth()/2)*Math.cos((2*i*Math.PI)/points.length))),
					(int)(getCenterY()+((getHeight()/2)*Math.sin((2*i*Math.PI)/points.length))));
		}
	}

	public void montee(double pas) {
		y-=pas;
	}

	public void descente(double pas) {
		y+=pas;
	}

	public void deplacementHorizontal() {
		if(x>=Commune.GAUCHE && x<=Commune.DROITE){
			x+=xdir*Commune.TAILLE_PAS_INITIAL;
		}
		else {
			if (x<Commune.GAUCHE && xdir==-1) {
				x=Commune.DROITE;
			}
			if (x>Commune.DROITE && xdir==1) {
				x=Commune.GAUCHE;
			}
		}
	}

	public int getXdir() {
		return xdir;
	}

	public void setXdir(int xd) {
		xdir = xd;
	}

	public int getYdir() {
		return ydir;
	}

	public void setYdir(int yd) {
		ydir = yd;
	}
	
	public void incrementerHauteurActuelle() {
		hauteurActuelle++;
	}
	
	public void decrementerHauteurActuelle() {
		hauteurActuelle--;
	}

	public int getHauteurActuelle() {
		return hauteurActuelle;
	}

	public void setHauteurActuelle(int hauteurActuelle) {
		this.hauteurActuelle = hauteurActuelle;
	}

	public int getHauteurMaximaleAtteinte() {
		return hauteurMaximaleAtteinte;
	}

	public void setHauteurMaximaleAtteinte(int hauteurMaximaleAtteinte) {
		this.hauteurMaximaleAtteinte = hauteurMaximaleAtteinte;
	}

	public void mettreAJourPositionPoints() {
		for (int i=0;i<points.length;i++) {
			points[i].setLocation((int)(getCenterX()+((getWidth()/2)*Math.cos((2*i*Math.PI)/points.length))),
					(int)(getCenterY()+((getHeight()/2)*Math.sin((2*i*Math.PI)/points.length))));
		}
	}
	
	@Override
	public boolean intersects(Rectangle r) {
		for (int i=0;i<points.length;i++) {
			if (r.contains(points[i])) {
				return true;
			}
		}
		return false;
	}
}